home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #4 / Amiga Plus CD - 2000 - No. 4.iso / Tools / Emulatoren / UAE0.6.4 / src / include / options.h < prev    next >
C/C++ Source or Header  |  2000-05-27  |  6KB  |  249 lines

  1.  /*
  2.   * UAE - The Un*x Amiga Emulator
  3.   *
  4.   * cpp magic
  5.   *
  6.   * Copyright 1995, 1996 Bernd Schmidt, Ed Hanway
  7.   */
  8.  
  9. #define UAEMAJOR 0
  10. #define UAEMINOR 6
  11. #define UAEURSAMINOR 4
  12.  
  13. typedef enum { KBD_LANG_US, KBD_LANG_DE, KBD_LANG_SE, KBD_LANG_FR, KBD_LANG_IT } KbdLang;
  14.  
  15. extern int version;
  16. extern int framerate;
  17. extern int produce_sound;
  18. extern int correct_aspect;
  19. extern int use_fast_draw;
  20. extern int use_debugger;
  21. extern int use_serial;
  22. extern int illegal_mem;
  23. extern int use_fast_mem;
  24. extern int use_gfxlib;
  25. extern int no_xhair;
  26. extern int use_lores;
  27. extern int automount_uaedev;
  28. extern int fake_joystick;
  29. extern KbdLang keyboard_lang;
  30. extern int color_mode;
  31. extern int screen_res;
  32. extern int sound_desired_bits;
  33. extern int sound_desired_freq;
  34. extern int sound_desired_bsiz;
  35. extern int allow_save;
  36. extern int no_gui;
  37. extern long hardfile_size;
  38.  
  39. /* Contains the filename of .uaerc */
  40. extern char optionsfile[];
  41.  
  42. /* AIX doesn't think it is Unix. Neither do I. */
  43. #if defined(_ALL_SOURCE) || defined(_AIX)
  44. #undef __unix
  45. #define __unix
  46. #endif
  47.  
  48. #define MAX_COLOR_MODES 5
  49. #define MAX_SCREEN_MODES 4
  50.  
  51. extern void target_specific_usage(void);
  52.  
  53. extern char df0[], df1[], df2[], df3[], romfile[], prtname[], sername[];
  54.  
  55. #ifndef __unix
  56. extern void parse_cmdline(int argc, char **argv);
  57. #endif
  58.  
  59. #ifdef __mac__
  60. /* Apparently, no memcpy :-/ */
  61. static __inline__ void *memcpy(void *to, void *from, int size)
  62. {
  63.     BlockMove(from, to, size);
  64. }
  65. #endif
  66.  
  67. /* strdup() may be non-portable if you have a weird system */
  68. static char *my_strdup(const char*s)
  69. {
  70.     /* The casts to char * are there to shut up the compiler on HPUX */
  71.     char *x = (char*)malloc(strlen((char *)s) + 1);
  72.     strcpy(x, (char *)s);
  73.     return x;
  74. }
  75.  
  76. #undef REGPARAM
  77. #define fast_memcmp memcmp
  78. #define memcmpy generic_memcmpy
  79.  
  80. static __inline__ int generic_memcmpy(void *foo, const void *bar, int len)
  81. {
  82.     int res = memcmp(foo, bar, len);
  83.     if (res)
  84.     memcpy(foo, bar, len);
  85.     return res;
  86. }
  87.  
  88. #if defined(__GNUC_MINOR__)
  89.  
  90. #ifdef __i386__
  91.  
  92. #define INTEL_FLAG_OPT
  93.  
  94. #undef fast_memcmp
  95. #undef memcmpy
  96.  
  97. /*
  98.  * Careful: These inline functions may be used only _once_. We'd want to 
  99.  * generate unique labels for each inline function, but unfortunately not each
  100.  * installation of GCC comes with GAS. Bletch.
  101.  */
  102.  
  103. static __inline__ int fast_memcmp(const void *foo, const void *bar, int len)
  104. {
  105.     int differs, baz;
  106.     __asm__ __volatile__ ("subl $4, %2\n"
  107.               "jc  LLA2\n"
  108.               "LLA1:\n"
  109.               "movl (%0),%%ebx\n"
  110.               "cmpl (%1),%%ebx\n"
  111.               "jne LLA5\n"
  112.               "addl $4, %0\n"
  113.               "addl $4, %1\n"
  114.               "subl $4, %2\n"
  115.               "jnc  LLA1\n"
  116.               "LLA2:\n"
  117.               "addl $4, %2\n"
  118.               "jz LLA4\n"
  119.               "LLA3:\n"
  120.               "movb (%0),%%bl\n"
  121.               "cmpb (%1),%%bl\n"
  122.               "jne LLA5\n"
  123.               "incl %0\n"
  124.               "incl %1\n"
  125.               "decl %2\n"
  126.               "jnz LLA3\n"
  127.               "LLA4:\n"
  128.               "movl $0, %3\n"
  129.               "jmp LLA6\n"
  130.               "LLA5:\n"
  131.               "movl $1, %3\n"
  132.               "LLA6:\n"
  133.               : "=&r" (foo), "=&r" (bar), "=&rm" (len), "=rm" (differs),
  134.                 "=&b" (baz)
  135.               : "0" (foo), "1" (bar), "2" (len), "3" (baz) : "cc");
  136.     return differs;
  137. }
  138.  
  139. static __inline__ int memcmpy(void *foo, const void *bar, int len)
  140. {
  141.     int differs, baz = 0, uupzuq = 0;
  142.  
  143.     __asm__ __volatile__ ("subl %1, %2\n"
  144.               "movl $0, %0\n"
  145.               "subl $16, %3\n"
  146.               "jc LLB7\n"
  147.               
  148.               "LLB8:\n"
  149.               "movl (%1),%%ecx\n"
  150.               "movl (%2,%1),%%ebx\n"
  151.               "xorl %%ebx, %%ecx\n"
  152.               "movl %%ebx, (%1)\n"
  153.               "orl %%ecx, %0\n"
  154.               
  155.               "movl 4(%2,%1),%%ebx\n"
  156.               "movl 4(%1),%%ecx\n"
  157.               "xorl %%ebx, %%ecx\n"
  158.               "movl %%ebx, 4(%1)\n"
  159.               "orl %%ecx, %0\n"
  160.               
  161.               "movl 8(%2,%1),%%ebx\n"
  162.               "movl 8(%1),%%ecx\n"
  163.               "xorl %%ebx, %%ecx\n"
  164.               "movl %%ebx, 8(%1)\n"
  165.               "orl %%ecx, %0\n"
  166.               
  167.               "movl 12(%2,%1),%%ebx\n"
  168.               "movl 12(%1),%%ecx\n"
  169.               "xorl %%ebx, %%ecx\n"
  170.               "movl %%ebx, 12(%1)\n"
  171.               "orl %%ecx, %0\n"
  172.               
  173.               "addl $16, %1\n"
  174.               "subl $16, %3\n"
  175.               "jnc  LLB8\n"
  176.               
  177.               "LLB7:\n"
  178.               "addl $16, %3\n"
  179.               "subl $4, %3\n"
  180.               "jc  LLB2\n"
  181.               
  182.               "LLB1:\n"
  183.               "movl (%2,%1),%%ebx\n"
  184.               "movl (%1),%%ecx\n"
  185.               "xorl %%ebx, %%ecx\n"
  186.               "movl %%ebx, (%1)\n"
  187.               "orl %%ecx, %0\n"
  188.               "addl $4, %1\n"
  189.               "subl $4, %3\n"
  190.               "jnc  LLB1\n"
  191.               
  192.               "LLB2:\n"
  193.               "addl $4, %3\n"
  194.               "jz LLB6\n"
  195.               "xorl %%ecx, %%ecx\n"
  196.               
  197.               "LLB3:\n"
  198.               "movb (%2,%1),%%bl\n"
  199.               "movb (%1),%%cl\n"
  200.               "xorb %%bl,%%cl\n"
  201.               "movb %%bl,(%1)\n"
  202.               "orl %%ecx, %0\n"
  203.               "incl %1\n"
  204.               "decl %3\n"
  205.               "jnz LLB3\n"
  206.               
  207.               "LLB6:\n"
  208.               : "=m" (differs)
  209.               : "r" (foo), "r" (bar), "r" (len), "b" (baz), "c" (uupzuq) : "cc", "memory");
  210.     /* Now tell the compiler that foo, bar and len have been modified 
  211.      * If someone finds a way to express all this cleaner in constraints that
  212.      * GCC 2.7.2 understands, please FIXME */
  213.     __asm__ __volatile__ ("" : "=rm" (foo), "=rm" (bar), "=rm" (len) : :  "ebx", "ecx", "edx", "eax", "esi", "memory");
  214.  
  215.     return differs;
  216. }
  217. #endif /* __i386__ */
  218.  
  219. #if __GNUC__ > 2 || __GNUC_MINOR__ > 6
  220.  
  221. #if defined(__i386__) && !defined(USE_PROFILING)
  222. #define REGPARAM __attribute__((regparm(3)))
  223. #endif /* __i386__ */
  224.  
  225. #endif /* GCC version 2.7 or higher */
  226. #endif /* GCC 2 */
  227.  
  228. #ifndef REGPARAM
  229. #define REGPARAM
  230. #endif
  231.  
  232. /*
  233.  * You can specify numbers from 0 to 5 here. It is possible that higher
  234.  * numbers will make the CPU emulation slightly faster, but if the setting
  235.  * is too high, you will run out of memory while compiling.
  236.  * Best to leave this as it is.
  237.  */
  238. #define CPU_EMU_SIZE 0
  239.  
  240. #ifdef DONT_WANT_SOUND
  241. #undef LINUX_SOUND
  242. #undef AF_SOUND
  243. #undef SOLARIS_SOUND
  244. #undef SGI_SOUND
  245. #endif
  246.  
  247. /* #define NEED_TO_DEBUG_BADLY */
  248.  
  249.